﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 低频天线阵列相控阵信号发生系统SmartFASK12.Controls
{
    /// <summary>
    /// 时间计算类
    /// </summary>
    public class MTiming
    {
        private static MTiming _instance = null;

        public static MTiming Singleton()
        {
            if (_instance == null)
            {
                _instance = new MTiming();
            }

            return _instance;
        }
        /// <summary>
        /// 开始时间
        /// </summary>
        private TimeSpan m_StartTime;
        /// <summary>
        /// 运行时间
        /// </summary>
        private TimeSpan duringTime;

        /// <summary>
        /// 初始化
        /// </summary>
        public MTiming()    //构造函数用于初始化开始时间和持续时间
        {
            this.m_StartTime = new TimeSpan(0);   //初始化的时候设置时间为00:00:00
            this.duringTime = new TimeSpan(0);
        }

        /// <summary>
        /// 开始计时
        /// </summary>
        public void StartTime()
        {
            GC.Collect();                        //为了防止程序运行的时候有无用单元干扰提前进行GC收集
            GC.WaitForPendingFinalizers();       //储存在堆中所有对象在最后都会调用finalizer方法，但是无法确定finalizer是否执行，所有要等待finalizer都运行完毕进行后面的步骤(此方法执行的时候线程会挂起)
            m_StartTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;  //得到当前进程的时间
        }

        /// <summary>
        /// 停止计时
        /// </summary>
        public void StopTime()
        {
            duringTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(m_StartTime);
            //得到当前进程的时间过了多少时间即当前时间-开始(m_StartTime)的时间
        }

        /// <summary>
        /// 读取运行时间
        /// </summary>
        /// <returns></returns>
        public TimeSpan Result()
        {
            return duringTime;      //返回运行时间
        }
    }
}
